package com.castle.fortress.admin.pay.service.impl;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.castle.fortress.admin.pay.dto.PayAliConfigDto;
import com.castle.fortress.admin.pay.entity.PayAliConfigEntity;
import com.castle.fortress.admin.pay.mapper.PayAliConfigMapper;
import com.castle.fortress.admin.pay.service.PayAliConfigService;
import com.castle.fortress.common.enums.YesNoEnum;
import com.castle.fortress.common.utils.CommonUtil;
import com.castle.fortress.common.utils.ConvertUtil;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 支付宝支付配置表 服务实现类
 *
 * @author castle
 * @since 2022-07-07
 */
@Service
public class PayAliConfigServiceImpl extends ServiceImpl<PayAliConfigMapper, PayAliConfigEntity> implements PayAliConfigService {
    /**
    * 获取查询条件
    * @param payAliConfigDto
    * @return
    */
    public QueryWrapper<PayAliConfigEntity> getWrapper(PayAliConfigDto payAliConfigDto){
        QueryWrapper<PayAliConfigEntity> wrapper= new QueryWrapper();
        if(payAliConfigDto != null){
            PayAliConfigEntity payAliConfigEntity = ConvertUtil.transformObj(payAliConfigDto,PayAliConfigEntity.class);
            wrapper.like(payAliConfigEntity.getId() != null,"id",payAliConfigEntity.getId());
            wrapper.like(StrUtil.isNotEmpty(payAliConfigEntity.getAppId()),"app_id",payAliConfigEntity.getAppId());
            wrapper.like(StrUtil.isNotEmpty(payAliConfigEntity.getPrivateKey()),"private_key",payAliConfigEntity.getPrivateKey());
            wrapper.like(StrUtil.isNotEmpty(payAliConfigEntity.getAliPayPublicKey()),"ali_pay_public_key",payAliConfigEntity.getAliPayPublicKey());
            wrapper.like(StrUtil.isNotEmpty(payAliConfigEntity.getNotifyUrl()),"notify_url",payAliConfigEntity.getNotifyUrl());
            wrapper.like(StrUtil.isNotEmpty(payAliConfigEntity.getReturnUrl()),"return_url",payAliConfigEntity.getReturnUrl());
            wrapper.like(StrUtil.isNotEmpty(payAliConfigEntity.getPayTypeCode()),"pay_type_code",payAliConfigEntity.getPayTypeCode());
            wrapper.eq(StrUtil.isNotEmpty(payAliConfigEntity.getSceneCode()),"scene_code",payAliConfigEntity.getSceneCode());
            wrapper.like(payAliConfigEntity.getStatus() != null,"status",payAliConfigEntity.getStatus());
        }
        return wrapper;
    }


    @Override
    public IPage<PayAliConfigDto> pagePayAliConfig(Page<PayAliConfigDto> page, PayAliConfigDto payAliConfigDto) {
        QueryWrapper<PayAliConfigEntity> wrapper = getWrapper(payAliConfigDto);
        Page<PayAliConfigEntity> pageEntity = new Page(page.getCurrent(), page.getSize());
        Page<PayAliConfigEntity> payAliConfigPage=baseMapper.selectPage(pageEntity,wrapper);
        Page<PayAliConfigDto> pageDto = new Page(payAliConfigPage.getCurrent(), payAliConfigPage.getSize(),payAliConfigPage.getTotal());
        pageDto.setRecords(ConvertUtil.transformObjList(payAliConfigPage.getRecords(),PayAliConfigDto.class));
        return pageDto;
    }


    @Override
    public List<PayAliConfigDto> listPayAliConfig(PayAliConfigDto payAliConfigDto){
        QueryWrapper<PayAliConfigEntity> wrapper = getWrapper(payAliConfigDto);
        List<PayAliConfigEntity> list = baseMapper.selectList(wrapper);
        return ConvertUtil.transformObjList(list,PayAliConfigDto.class);
    }

    @Override
    public PayAliConfigDto getPayConfig(String code, String sceneCode) {
        if(CommonUtil.verifyParamEmpty(code,sceneCode)){
            return null;
        }
        PayAliConfigDto payAliConfigDto = new PayAliConfigDto();
        payAliConfigDto.setPayTypeCode(code);
        payAliConfigDto.setSceneCode(sceneCode);
        payAliConfigDto.setStatus(YesNoEnum.YES.getCode());
        List<PayAliConfigDto> list = listPayAliConfig(payAliConfigDto);
        if(list==null || list.size()!= 1){
            return null;
        }
        return list.get(0);
    }

    @Override
    public void initStatus(PayAliConfigEntity entity) {
        Integer status = entity.getStatus()!=1?2:entity.getStatus();
        if(CommonUtil.verifyParamEmpty(entity,entity.getAppId(),entity.getPrivateKey(),entity.getAliPayPublicKey(),entity.getNotifyUrl(),entity.getSceneCode(),entity.getPayTypeCode())){
            status = 3;
        }
        entity.setStatus(status);
    }
}

